using System;
using System.ComponentModel;
using System.Linq.Expressions;
using System.Runtime.CompilerServices;

namespace Microsoft.ComponentModel
{
    public interface INotifyObject : INotifyPropertyChanged
    {
        void SetProperty<T>(Expression<Func<T>> propertyExpression, T value);

        Boolean SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null);

        void OnPropertyChanged<T>(Expression<Func<T>> propertyExpression);

        void OnPropertyChanged(String propertyName);
    }
}